package com.ly.cloud.controller;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.plugins.Page;
import com.ly.cloud.common.mybatisplus.plugins.PageInfo;
import com.ly.cloud.dto.CodeDetailDto;
import com.ly.cloud.service.DataDictService;
import com.ly.cloud.vo.CodeDeailFidVo;
import com.ly.cloud.vo.CodeDetailVo;
import com.ly.cloud.vo.CodeMenuVo;
import com.ly.cloud.web.utils.WebResponse;
/**
 * Description:数据字典，该控制器主要是用来操作数据字典模块
 * @author luhuacong
 * @date: 2018年12月6日
 */
@RestController
@RequestMapping("/dataDict")
public class DataDictController {

	@Resource 
	private DataDictService dataDictService;
	
	/**
	 * Description:查询代码分类和代码类别
	 * @return WebResponse<List<CodeClassificationVo>>代码分类列表
	 * @author luhuacong
	 * @date: 2018年12月6日
	 */
	@RequestMapping(value = "/queryCodeList", method = RequestMethod.GET)
	public WebResponse<List<CodeMenuVo>> queryCodeList(@RequestParam(required=false) Long id){
		List<CodeMenuVo> list = dataDictService.selectCodeList(id);
		return new WebResponse<List<CodeMenuVo>>().success(list);
	}
	
	/**
	 * Description:根据代码类别id查询代码详情列表
	 * @return WebResponse<PageInfo<CodeDetailVo>>代码分类列表
	 * @param pageNum 当前页
	 * @param pageSize 每页显示条数
	 * @param id 代码分类id
	 * @param condition 查询条件
	 * @author luhuacong
	 * @date: 2018年12月11日
	 */
	@RequestMapping(value = "/queryDetailList", method = RequestMethod.GET)
	public  WebResponse<PageInfo<CodeDetailVo>> queryAllSysSet(@RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String id,@RequestParam(required=false)String condition ){
		Page<CodeDetailVo> page = dataDictService.selectDetailList(new Page<CodeDetailVo>(pageNum, pageSize), id,condition);
		return new WebResponse<PageInfo<CodeDetailVo>>().success(PageInfo.toPageInfo(page));
	}
	
	/**
	 * Description:修改代码详情
	 * @param 条件封装对象
	 * @return  WebResponse<Boolean>
	 * @author luhuacong
	 * @date: 2018年12月12日
	 */
	@RequestMapping(value="/updateDetail",method = RequestMethod.POST)
	public WebResponse<Boolean> update(@RequestBody CodeDetailDto dto) {
		boolean rs = dataDictService.updateCodeDetail(dto);
		return new WebResponse<Boolean>().success(rs);
	}
	
	/**
	 * Description:添加代码详情
	 * @param 条件封装对象
	 * @return  WebResponse<Boolean>
	 * @author luhuacong
	 * @date: 2018年12月12日
	 */
	@RequestMapping(value="/insertDetail",method = RequestMethod.POST)
	public WebResponse<Boolean> insertDetail(@RequestHeader(required=false,value = "loginUserName") String loginUserName,@RequestBody CodeDetailDto dto) {
		boolean rs = dataDictService.insert(dto,loginUserName);
		return new WebResponse<Boolean>().success(rs);
	}
	
	/** 
	 * Method Name: deleteDetailById
	 * Description:  
	 * 根据id删除代码详情
	 * @param id 
	 * @author LuHuaCong
	 * @date: 2018年12月12日
	 */
	@RequestMapping(value="/deleteDetailById/{id}",method = RequestMethod.POST)
	public WebResponse<Boolean> deleteDetailById(@PathVariable("id") Long id) {
		boolean rs = dataDictService.deleteDetailById(id);
		return new WebResponse<Boolean>().success(rs);
	}
	
	/** 
	 * Method Name: deleteDetailByIds
	 * Description:  
	 * 批量删除代码详情
	 * @param ids
	 * @return 删除条数
	 * @author LuHuaCong
	 * @date: 2018年12月12日
	 */
	@RequestMapping(value="/deleteDetailByIds",method = RequestMethod.POST)
	public WebResponse<Integer> deleteDetailByIds(@RequestBody List<Long> ids){
		
		Integer rs = dataDictService.deleteDetailByIds(ids);
		return new WebResponse<Integer>().success(rs);
	}
	
	
	/**
	 * 根据代码类别码（固定）查找对应的分类详情；
	 * 例如传入XTGL_XBM性别分类，查询对应的分类详情男、女，具体有什么代码类别码查看表XTGL_DMJ_DMLBB;
	 * 主要是让其他业务模块查询代码集下拉列表时调用
	 * caihuihai @2018-12-14
	 * @param dmlb 代码类别码
	 * @return
	 */
	@RequestMapping(value = "/findDmxqByDmlb/{dmlb}", method = RequestMethod.GET)
	public WebResponse<List<CodeDetailVo>> findDmxqByDmlb(@PathVariable("dmlb") String dmlb){
		List<CodeDetailVo> list = dataDictService.findDmxqByDmlb(dmlb);
		return new WebResponse<List<CodeDetailVo>>().success(list);
	}
	
	/** 
	 * Method Name: selectFid
	 * Description:  
	 * 查询fid,下拉列表
	 * 当dmlb为空时，查询所有的fid;当dmlb不为空时，查询该代码类别的fid
	 * @param dmlb
	 * @return 父id列表
	 * @author LuHuaCong
	 * @date: 2018年12月20日
	 */
	@RequestMapping(value = "/selectFid", method = RequestMethod.GET)
	public WebResponse<List<CodeDeailFidVo>> selectFid(@RequestParam(required=false) String dmlb){
		List<CodeDeailFidVo> list = dataDictService.selectFid(dmlb);
		return new WebResponse<List<CodeDeailFidVo>>().success(list);
	}
	
	/** 
	 * Method Name: selectSourcePlace
	 * Description:  
	 * 选择生源地下拉按钮
	 * @return 生源地列表
	 * @author LuHuaCong
	 * @date: 2018年12月20日
	 */
	@RequestMapping(value = "/selectSourcePlace", method = RequestMethod.GET)
	public WebResponse<List<CodeDetailVo>> selectSourcePlace(){
		List<CodeDetailVo> list = dataDictService.selectSourcePlace();
		return new WebResponse<List<CodeDetailVo>>().success(list);
	}
	
	/**
	 * 查询某个代码分类下的所有代码详情 
	 * @param dmfl 代码分类编号
	 * @return
	 * @date  2019/1/9
	 */
	@RequestMapping(value = "/selectDmxqByDmfl", method = RequestMethod.GET)
	public WebResponse<PageInfo<CodeDetailVo>> selectDmxqByDmfl(@RequestParam int pageNum, @RequestParam int pageSize, @RequestParam String dmfl){
		Page<CodeDetailVo> page = dataDictService.selectDmxqByDmfl(new Page<CodeDetailVo>(pageNum,pageSize),dmfl);
		return new WebResponse<PageInfo<CodeDetailVo>>().success(PageInfo.toPageInfo(page));
	}
}
